// src/utils/http.js
/**
 * 原生 POST 请求方法
 * @param {string} url - 请求地址
 * @param {object} data - 请求数据
 * @param {object} options - 其他配置项
 * @returns {Promise} 返回 Promise 对象
 */
export const nativePost = async (url, data = {}, options = {}) => {
    try {
      // 默认配置
      const defaultOptions = {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          // 可以添加其他默认 headers
        },
        credentials: 'include', // 包含 cookies
        mode: 'cors', // 跨域模式
      }
  
      // 合并配置
      const fetchOptions = {
        ...defaultOptions,
        ...options,
        headers: {
          ...defaultOptions.headers,
          ...options.headers,
        },
        body: JSON.stringify(data)
      }
  
      // 发送请求
      const response = await fetch(url, fetchOptions)
  
      // 检查响应状态
      if (!response.ok) {
        throw new Error(`HTTP error! status: ${response.status}`)
      }
  
      // 解析响应数据
      const result = await response.json()
      console.log(result,'==result==')
      // 根据你的接口返回格式调整
      if (result.code === 200) {
        return result.data
      } else if (result.errcode === 0) {
        return result.errmsg
      } else {
        throw new Error(result.message || '请求失败')
      }
    } catch (error) {
      console.error('Request failed:', error)
      throw error
    }
  }
  
  /**
   * 带重试机制的原生 POST 请求
   * @param {string} url - 请求地址
   * @param {object} data - 请求数据
   * @param {object} options - 其他配置项
   * @param {number} retries - 重试次数
   * @returns {Promise} 返回 Promise 对象
   */
  export const nativePostWithRetry = async (url, data = {}, options = {}, retries = 3) => {
    try {
      return await nativePost(url, data, options)
    } catch (error) {
      if (retries > 0) {
        // 等待一段时间后重试
        await new Promise(resolve => setTimeout(resolve, 1000))
        return nativePostWithRetry(url, data, options, retries - 1)
      }
      throw error
    }
  }
  
  /**
   * 带超时的原生 POST 请求
   * @param {string} url - 请求地址
   * @param {object} data - 请求数据
   * @param {object} options - 其他配置项
   * @param {number} timeout - 超时时间（毫秒）
   * @returns {Promise} 返回 Promise 对象
   */
  export const nativePostWithTimeout = async (url, data = {}, options = {}, timeout = 5000) => {
    const controller = new AbortController()
    const timeoutId = setTimeout(() => controller.abort(), timeout)
  
    try {
      const result = await nativePost(url, data, {
        ...options,
        signal: controller.signal
      })
      clearTimeout(timeoutId)
      return result
    } catch (error) {
      clearTimeout(timeoutId)
      if (error.name === 'AbortError') {
        throw new Error('请求超时')
      }
      throw error
    }
  }
  // 方法1：直接发送 FormData
export const postFormData = async (url, formData) => {
  try {
    const response = await fetch(url, {
      method: 'POST',
      body: formData, // FormData 会自动设置正确的 Content-Type
      credentials: 'include', // 包含 cookies
      headers: {
        'referer': `${url}/new`,
      },
    })
    return await response.json()
  } catch (error) {
    console.error('请求失败:', error)
    throw error
  }
}